import Vue from 'vue'
import Vuex from 'vuex'
import { loginApi } from '@/api'
Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    // 获取数据的时候，先进行判断 =》 用户是否登陆过，本地是否存储 token信息
    token: localStorage.getItem('token') || '',
    refresh_token: localStorage.getItem('refresh_token') || '',
    user: JSON.parse(localStorage.getItem('user')) || {}
  },
  mutations: {
    // 定义修改state中数据的方法
    setToken (state, token) {
      state.token = token

      // 将token数据 存放到本地  实现登录结果持久化（登陆持续，认证用户token刷新不丢失）
      localStorage.setItem('token', token)
    },
    setRefreshToken (state, refresh_token) {
      state.refresh_token = refresh_token

      // 将refreshToken存放到本地 实现登陆持久化
      localStorage.setItem('refresh_token', refresh_token)
    },
    setUser (state, user) {
      state.user = user
      localStorage.setItem('user', JSON.stringify(user))
    },
    updatePhoto (state, photo) {
      state.user.photo = photo
      localStorage.setItem('user', JSON.stringify(state.user.photo))
    }
  },
  actions: {
    // 异步获取数据，通过mutations中的方法给state中的数据赋值
    async syncLoginFn (store, val) {
      try {
        const res = await loginApi(val)
        const { token, refresh_token } = res.data.data
        store.commit('setToken', token)
        store.commit('setRefreshToken', refresh_token)
        // 获取数据成功，返回成功的promise结果
        return Promise.resolve(res)
      } catch (error) {
        // 获取数据失败，则返回失败的Promise结果
        return Promise.reject(error)
      }
    }
  },
  modules: {
  }
})
